﻿using ExcellentProjectPlus.Seguridades.PerfilPersonas;
using AutoMapper;
using ExcellentProjectPlus.Dominio.Seguridades.Entidades;
using Servicios.Seguridad.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Seguridad.Controllers
{
    public class PerfilesPersonasController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDePerfilPersonas _servicioDeGestionDePerfilesPersonas;
        #endregion

        #region Constructores
        public PerfilesPersonasController(IServicioDeGestionDePerfilPersonas servicioDeGestionDePerfilesPersonas)
        {
            _servicioDeGestionDePerfilesPersonas = servicioDeGestionDePerfilesPersonas;
            Mapper.CreateMap<PerfilPersona, PerfilPersonaModel>();
           
        }
        #endregion

        public IHttpActionResult Get()
        {
            return Ok(Mapper.Map<IEnumerable<PerfilPersona>, IEnumerable<PerfilPersonaModel>>
                (_servicioDeGestionDePerfilesPersonas.ObtenerPerfilPersonas()));
        }

        [ResponseType(typeof(PerfilPersonaModel))]
        public IHttpActionResult GetPerfilPersona(int id)
        {
            PerfilPersona perfilPersona = _servicioDeGestionDePerfilesPersonas.ObtenerPerfilPersonaPorId(id);
            if (perfilPersona == null)
            {
                return NotFound();
            }
            return Ok(Mapper.Map<PerfilPersona, PerfilPersonaModel>(perfilPersona));
        }

        [ResponseType(typeof(PerfilPersona))]
        public IHttpActionResult Post(PerfilPersona perfilPersona)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _servicioDeGestionDePerfilesPersonas.AgregarPerfilPersona(perfilPersona);

            return CreatedAtRoute("DefaultApi", new { id = perfilPersona.IdPerfilPersona }, perfilPersona);
        }

        public IHttpActionResult Put(int id, PerfilPersona perfilPersona)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != perfilPersona.IdPerfilPersona)
            {
                return BadRequest();
            }

            _servicioDeGestionDePerfilesPersonas.ModificarPerfilPersona(perfilPersona);

            return StatusCode(HttpStatusCode.NoContent);
        }

        [ResponseType(typeof(PerfilPersona))]
        public IHttpActionResult Delete(int id)
        {
            PerfilPersona perfilPersona = _servicioDeGestionDePerfilesPersonas.ObtenerPerfilPersonaPorId(id);
            if (perfilPersona == null)
            {
                return NotFound();
            }

            _servicioDeGestionDePerfilesPersonas.EliminarPerfilPersona(perfilPersona);

            return Ok(perfilPersona);
        }

        private bool PerfilPersonaExists(int id)
        {
            return _servicioDeGestionDePerfilesPersonas.ObtenerPerfilPersonaPorId(id) != null;
        }
    }
}
